汎用的に使えるAWS BackupのCfnテンプレートが欲しかったので作った
DA事業本部のsutoです。
特定のタグがついたリソースに対して定期バックアップの設定がしたかったので、Cloudformationテンプレートをささっと作ってみました。
要件
- AWS Backupのボールト、プラン、ルール、リソース割り当てを新規作成
- 日本時間のAM4時に日次バックアップを取得
- 復旧ポイントが作成されてから削除されるまでの日数は14日とする
テンプレート
要件を踏まえたCloudformationテンプレートは以下となります。
AWSTemplateFormatVersion: '2010-09-09' Description: AWS Backup Setting Parameters: MyBackupName: Description: Backup plan name Type: String Default: '' Cron: Description: Time to do backup(cron) Type: String Default: cron(0 18 * * ? *) TagKey: Description: TagKey for backup Type: String Default: '' TagValue: Description: TagValue for backup Type: String Default: '' Resources: BackupVault: Type: "AWS::Backup::BackupVault" Properties: BackupVaultName: !Sub ${MyBackupName}-vault BackupPlan: Type: AWS::Backup::BackupPlan Properties: BackupPlan: BackupPlanName: !Ref MyBackupName BackupPlanRule: - RuleName: !Sub ${MyBackupName}-rule TargetBackupVault: !Ref BackupVault ScheduleExpression: !Ref Cron CompletionWindowMinutes: 300 StartWindowMinutes: 60 Lifecycle: DeleteAfterDays: 14 BackupSelection: Type: AWS::Backup::BackupSelection Properties: BackupPlanId: !Ref BackupPlan BackupSelection: SelectionName: !Ref MyBackupName IamRoleArn: !Sub "arn:aws:iam::${AWS::AccountId}:role/service-role/AWSBackupDefaultServiceRole" ListOfTags: - ConditionType: "STRINGEQUALS" ConditionKey: !Ref TagKey ConditionValue: !Ref TagValue
(参考)cron式の書き方はこちら
※2020/7/7 追記:上記テンプレートはIAMロール「AWSBackupDefaultServiceRole」を既に作成されていなければバックアップが作動しないので、バージョンアップ版としてIAMロールもまとめて作成するテンプレートを別の記事で掲載しました。
実際にやってみた
以下画面のようにパラメータを入力して実行しました。
結果、しっかりとバックアップ設定ができていました。
あとは入力したタグをバックアップしたいリソースに付与すればOKですね。
まとめ
なるべくテンプレート実行時の入力パラメータが少なくなるように意識して作成しました(面倒くさがり)。手動だといろいろ設定の手間が多いAWS Backupだからこそテンプレート化のメリットは大きいと思います。
タイトルの「汎用的な」と言うことで、よくある定期バックアップ設定のためのテンプレート作りを目指しましたので少しでもお役に立てばと思います。